Make finalizer more robust
authorMatthias Clasen <matthiasc@src.gnome.org>
Fri, 28 Dec 2007 19:55:37 +0000 (19:55 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Fri, 28 Dec 2007 19:55:37 +0000 (19:55 +0000)
svn path=/trunk/; revision=19283

ChangeLog
gtk/gtkclipboard.c

index 1414d21d236f6eb838daff736d2b01a606cac9ad..14421344d176bd4259e38dab9b099dcc6e4066ae 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-28  Matthias Clasen  <mclasen@redhat.com>
+
+       * gtk/gtkclipboard.c: Make the finalizer work when display is
+       not set.
+
 2007-12-28  Mathias Hasselmann  <mathias@openismus.com>
 
        Draw bottom shadow of GtkCalender headings. (#506113)
index 920aad923a0e40d270a466133e9b4f54ce74e74f..2bc781afbda25a067ac1821d91ed4714f24dd9e2 100644 (file)
@@ -193,26 +193,31 @@ static void
 gtk_clipboard_finalize (GObject *object)
 {
   GtkClipboard *clipboard;
-  GtkWidget *clipboard_widget;
-  GSList *clipboards;
+  GtkWidget *clipboard_widget = NULL;
+  GSList *clipboards = NULL;
 
   clipboard = GTK_CLIPBOARD (object);
 
-  clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list");
-  if (g_slist_index (clipboards, clipboard) >= 0)
-    g_warning ("GtkClipboard prematurely finalized");
+  if (clipboard->display)
+    {
+      clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list");
+
+      if (g_slist_index (clipboards, clipboard) >= 0)
+        g_warning ("GtkClipboard prematurely finalized");
 
-  /*  don't use get_clipboard_widget() here because it would create the
-   *  widget if it doesn't exist.
-   */
-  clipboard_widget = g_object_get_data (G_OBJECT (clipboard->display),
-                                        "gtk-clipboard-widget");
+      clipboards = g_slist_remove (clipboards, clipboard);
+
+      g_object_set_data (G_OBJECT (clipboard->display), "gtk-clipboard-list", 
+                         clipboards);
+
+      /* don't use get_clipboard_widget() here because it would create the
+       * widget if it doesn't exist.
+       */
+      clipboard_widget = g_object_get_data (G_OBJECT (clipboard->display),
+                                            "gtk-clipboard-widget");
+    }
 
   clipboard_unset (clipboard);
-  
-  clipboards = g_object_get_data (G_OBJECT (clipboard->display), "gtk-clipboard-list");
-  clipboards = g_slist_remove (clipboards, clipboard);
-  g_object_set_data (G_OBJECT (clipboard->display), I_("gtk-clipboard-list"), clipboards);
 
   if (clipboard->store_loop && g_main_loop_is_running (clipboard->store_loop))
     g_main_loop_quit (clipboard->store_loop);